package com.xiangge.homework;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class Tset1 {
    public static void main1(String[] args) {
        /*
        一个大V直播抽奖，奖品是现金红包，分别有
        {2, 588 , 888, 1000, 10000}五个奖金。
        请使用代码模拟抽奖，打印出每个奖项，奖项的出现顺序要随机且不重复。
        打印效果如下：（随机顺序，不一定是下面的顺序）
            888元的奖金被抽出
            588元的奖金被抽出
            10000元的奖金被抽出
            1000元的奖金被抽出
            2元的奖金被抽出
        */
        // 将奖金作为元素创建数组
        int[] arr = {2, 588, 888, 1000, 10000};
        // 再创建一个新数组用来存放已经被抽取过的奖金
        int[] newArr = new int[5];
        // 定义一个int类型变量，可以用来统计抽取次数
        int count= 0;
        // 将抽中的奖项放入新数组中，先对新数组进行遍历
        for (int i = 0; i < newArr.length; i++) {
            // 题目要求奖金出现是随机且不重复的，那当出现奖项重复时，重新抽奖
            // 不知道抽多少次才可以抽到所有奖项，是死循环使用while（true）
            while (true){
                // 抽奖是随机生成，使用Random
                Random random = new Random();
                // 定义一个索引，使用随机数赋值，用索引来判断抽到的奖项
                int index = random.nextInt(arr.length);
                // 创建临时变量，来表示存入新数组的奖金金额
                int money = arr[index];
                // 定义boolean类型，来判断奖项是否被抽取过
                boolean flag = true;
                // 遍历新数组，判断奖项是否出现过
                for (int j = 0; j < newArr.length; j++) {
                    // 使用if结构判断
                    if (newArr[j] == money){
                        flag = false;
                        break;
                    }
                }
                count++;
                // 可以存入数组，奖金没被抽取过
                if (flag == true){
                    newArr[i] = money;
                    break;
                }
            }
        }
        System.out.println("一共抽取了" + count + "次");
        System.out.println(Arrays.toString(newArr));
        for (int k = 0; k < newArr.length; k++) {
            System.out.println(newArr[k]);
        }
    }

    public static void main2(String[] args) {
        int[] arr1 = getOne();
        System.out.println(Arrays.toString(arr1));
    }
    // 定义一个无参有返回值的方法
    public static int[] getOne(){
        // 定义一个长度为7的数组
        int[] arr = new int[7];
        // 随机生成六个数，且不能重复
        Random random = new Random();
        // 双色球将前六个和最后一个分开，那就分开遍历
        // 先遍历红球,少一个蓝球位置，所以遍历的索引减一
        for (int i = 0; i < arr.length-1; i++) {

            // 不知道要生成几次，使用while
            while (true){
                int num = random.nextInt(33) + 1;
                // 要判断随机生成的数是否存在
                boolean flag = true;
                for (int j = 0; j < i; j++) {
                    if (arr[j] == num){
                        flag = false;
                        break;
                    }
                }
                if (flag == true){
                    arr[i] = num;
                    break;
                }
            }
        }
        arr[arr.length-1] = random.nextInt(16) + 1;
        return arr;
    }

    public static void main(String[] args) {
        // 调用产生中奖号码的功能
        int[] arr = createArr();
        System.out.println(Arrays.toString(arr));
        // 调用用户购买功能
        int[] userArr = userArr();
        System.out.println(Arrays.toString(userArr));
        // 调用中奖判断功能
        userWin(arr,userArr);
    }
    // 定义方法，产生一组中奖号码
    // 返回值类型：int[] 形参：（）
    // 无参有返回值的方法
    public static int[] createArr(){
        // 创建一个长度为7的数组arr并定义数组中开始存号码的位置
        int[] arr = new int[7];
        int index = 0;
        // 使用死循环模拟产生红球号码
        outer:while (true){
            // 产生一个随机的[1,33]；之间的红球号码
            int redNum = new Random().nextInt(33) + 1;
            // 循环判断arr的[0,index-1]范围内是否有元素和redNum相等
            for (int i = 0; i < index; i++) {
                // 如果arr的[0,index-1]的范围有和redNum相等的元素
                if (arr[i] == redNum){
                    // 舍弃redNum重新产生红球
                    continue outer;
                }
            }
            // 程序走到此处，说明：arr的[0,index-1]范围内没有和redNum相等的元素
            // 将redNum存入arr的index位置，并将index向后挪一个位置
            arr[index++] = redNum;
            // 当index值变大之后，立刻判断index是否到arr.length-1
            if (index == arr.length){
                break outer;
            }
        }
        // 将随机的[1,16]范围的蓝球号码放在数组arr的最后位置
        arr[arr.length-1] = new Random().nextInt(16) + 1;
        // 返回中奖号码
        return arr;
    }
    public static int[] userArr(){
        // 创建一个长度为7的数组arr并定义数组中开始存号码的位置
        int[] userArr = new int[7];
        int index = 0;
        // 使用死循环模拟产生红球号码
        outer:while (true){
            // 键盘输入一个范围在[1,33]内的红球号码
            System.out.println("请输入红球号码：");
            int redNum = new Scanner(System.in).nextInt();
            // 数据校验
            if (redNum < 1 || redNum > 33){
                System.err.println("输入红球号码不合法");
                continue outer;
            }
            // 循环判断arr的[0,index-1]范围内是否有元素和redNum相等
            inner:for (int i = 0; i < index; i++) {
                // 如果arr的[0,index-1]的范围有和redNum相等的元素
                if (userArr[i] == redNum){
                    // 舍弃redNum重新产生红球
                    continue outer;
                }
            }
            // 程序走到此处，说明：arr的[0,index-1]范围内没有和redNum相等的元素
            // 将redNum存入arr的index位置，并将index向后挪一个位置
            userArr[index++] = redNum;
            // 当index值变大之后，立刻判断index是否到arr.length-1
            if (index == userArr.length-1){
                break outer;
            }
        }
        // 将键盘录入的[1,16]范围的蓝球号码放在数组arr的最后位置
        int blueNum = 0;
        while (true){
            System.out.println("请输入一个蓝球号码：");
            blueNum = new Scanner(System.in).nextInt();
            if (blueNum < 1 || blueNum > 16){
                System.err.println("输入蓝球号码不合法");
                continue;
            }else {
                break;
            }
        }
        userArr[userArr.length-1] = blueNum;
        // 返回中奖号码
        return userArr;
    }
    public static void userWin(int[] arr,int[] userArr){
        // 定义int类型的变量来统计中奖的个数
        int countRed = 0;
        int countBlue = 0;
        // 遍历数组查看红球中奖个数
        // 首先遍历用户输入的购买红球
        for (int i = 0; i < userArr.length; i++) {
            // 再遍历随机生成的中奖红球，让用户输入的红球每一个与中奖红球数组全部元素进行比较
            for (int j = 0; j < arr.length; j++) {
                // 判断用户输入的红球是否与中奖有相同元素
                if (userArr[i] == arr[j]){
                    countRed++;
                    break;
                }
            }
        }
        // 判断蓝球是否相同
        countBlue = userArr[6] == arr[6]? 1:0;
        // 判断中奖情况
        System.out.println("中奖号码为：");
        System.out.println(Arrays.toString(arr));
        System.out.println("你购买的号码为：");
        System.out.println(Arrays.toString(userArr));
        if(countBlue == 1 && countRed < 3){
            System.out.println("恭喜您，中了5元小奖！");
        }else if(countBlue == 1 && countRed == 3
                || countBlue == 0 && countRed == 4){
            System.out.println("恭喜您，中了10元小奖！");
        }else if(countBlue == 1 && countRed == 4
                || countBlue == 0 && countRed == 5){
            System.out.println("恭喜您，中了200元！");
        }else if(countBlue == 1 && countRed == 5){
            System.out.println("恭喜您，中了3000元大奖！");
        }else if(countBlue == 0 && countRed == 6){
            System.out.println("恭喜您，中了500万超级大奖！");
        }else if(countBlue == 1 && countRed == 6){
            System.out.println("恭喜您，中了1000万巨奖！可以开始享受人生，诗和远方！！");
        }else {
            System.out.println("感谢您为福利事业做出的突出贡献！！");
        }
    }
}